package com.free.semantic.infrastruct.repository.impl;

import com.free.semantic.infrastruct.common.RelationDefineItemDO;
import com.free.semantic.infrastruct.mapper.RelationDefineItemMapper;
import com.free.semantic.infrastruct.repository.RelationDefineItemRepository;
import com.free.semantic.model.conceptmodel.RelationDefineItemEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.stream.Collectors;

@Repository
public class RelationDefineItemRepositoryImpl implements RelationDefineItemRepository {

    @Autowired
    private RelationDefineItemMapper relationDefineItemMapper;

    @Override
    public RelationDefineItemEntity findById(Long id) {
        RelationDefineItemDO itemDO = relationDefineItemMapper.findById(id);
        return convertToModel(itemDO);
    }

    @Override
    public List<RelationDefineItemEntity> findByRelationDefineId(Long relationDefineId) {
        List<RelationDefineItemDO> itemDOs = relationDefineItemMapper.findByRelationDefineId(relationDefineId);
        return itemDOs.stream()
                .map(this::convertToModel)
                .collect(Collectors.toList());
    }

    @Override
    public Long save(RelationDefineItemEntity relationDefineItemEntity) {
        RelationDefineItemDO itemDO = convertToDO(relationDefineItemEntity);
        relationDefineItemMapper.insert(itemDO);
        return itemDO.getId();
    }

    @Override
    public void update(RelationDefineItemEntity relationDefineItemEntity) {
        RelationDefineItemDO itemDO = convertToDO(relationDefineItemEntity);
        relationDefineItemMapper.update(itemDO);
    }

    @Override
    public void deleteById(Long id) {
        relationDefineItemMapper.deleteById(id);
    }

    @Override
    public void deleteByRelationDefineId(Long relationDefineId) {
        relationDefineItemMapper.deleteByRelationDefineId(relationDefineId);
    }

    private RelationDefineItemEntity convertToModel(RelationDefineItemDO itemDO) {
        if (itemDO == null) {
            return null;
        }
        RelationDefineItemEntity item = new RelationDefineItemEntity();
        item.setId(itemDO.getId());
        item.setRelationDefineId(itemDO.getRelationDefineId());
        item.setRelationDefine(itemDO.getRelationDefine());
        return item;
    }

    private RelationDefineItemDO convertToDO(RelationDefineItemEntity item) {
        if (item == null) {
            return null;
        }
        RelationDefineItemDO itemDO = new RelationDefineItemDO();
        itemDO.setId(item.getId());
        itemDO.setRelationDefineId(item.getRelationDefineId());
        itemDO.setRelationDefine(item.getRelationDefine());
        return itemDO;
    }
} 